/**
 * 标签相关API接口
 */

import request from '@/utils/request'

// 标签接口
export const tagApi = {
  /**
   * 获取标签列表
   * @param type 标签类型
   */
  getTags(type?: 'file' | 'note') {
    return request.get('/tags', {
      params: { type }
    })
  },

  /**
   * 创建标签
   * @param data 标签数据
   */
  createTag(data: {
    name: string
    color: string
    type: 'file' | 'note'
  }) {
    return request.post('/tags', data)
  },

  /**
   * 更新标签
   * @param tagId 标签ID
   * @param data 更新数据
   */
  updateTag(tagId: number, data: {
    name?: string
    color?: string
  }) {
    return request.put(`/tags/${tagId}`, data)
  },

  /**
   * 删除标签
   * @param tagId 标签ID
   */
  deleteTag(tagId: number) {
    return request.delete(`/tags/${tagId}`)
  },

  /**
   * 为目标添加标签
   * @param data 标签关联数据
   */
  addTagRelation(data: {
    tagId: number
    targetId: number
    targetType: 'favorite' | 'note'
  }) {
    return request.post('/tags/relations', data)
  },

  /**
   * 移除标签关联
   * @param relationId 关联ID
   */
  removeTagRelation(relationId: number) {
    return request.delete(`/tags/relations/${relationId}`)
  },

  /**
   * 获取目标的标签列表
   * @param targetId 目标ID
   * @param targetType 目标类型
   */
  getTargetTags(targetId: number, targetType: 'favorite' | 'note') {
    return request.get('/tags/target', {
      params: { targetId, targetType }
    })
  },

  /**
   * 批量设置目标标签
   * @param data 批量标签数据
   */
  setTargetTags(data: {
    targetId: number
    targetType: 'favorite' | 'note'
    tagIds: number[]
  }) {
    return request.post('/tags/target/batch', data)
  },

  /**
   * 获取热门标签
   * @param type 标签类型
   * @param limit 限制数量
   */
  getPopularTags(type: 'file' | 'note', limit: number = 10) {
    return request.get('/tags/popular', {
      params: { type, limit }
    })
  },

  /**
   * 搜索标签
   * @param params 搜索参数
   */
  searchTags(params: {
    keyword: string
    type?: 'file' | 'note'
  }) {
    return request.get('/tags/search', { params })
  }
}

// 标签相关类型定义
export interface Tag {
  id: number
  userId: number
  name: string
  color: string
  type: 'file' | 'note'
  usageCount: number
  createdAt: string
  updatedAt: string
}

export interface TagRelation {
  id: number
  tagId: number
  targetId: number
  targetType: 'favorite' | 'note'
  createdAt: string
  tag?: Tag
}
